package modelo.util;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import modelo.io.ManejadorArchivos;

public class Seguridad {

    private static String llave;

    public static String encriptar(String mensaje) {
        try {
            llave = ManejadorArchivos.instancia().obtenerPropiedad("../conf.properties", "llave_privada");
            byte[] llaveBytes = llave.getBytes();
            SecretKeySpec firma = new SecretKeySpec(llaveBytes, "HmacSHA1");
            Mac mac = Mac.getInstance("HmacSHA1");
            mac.init(firma);
            byte[] rawHmac = mac.doFinal(mensaje.getBytes());
            // Convert raw bytes to Hex
            //byte[] hexBytes = new Hex().encode(rawHmac);
            String hexBytes = bytesToHex(rawHmac);
            //  Covert array of Hex bytes to a String
            //return new String(hexBytes, "UTF-8");
            return hexBytes.toLowerCase();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static String bytesToHex(byte[] bytes) {
        final char[] hexArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        char[] hexChars = new char[bytes.length * 2];
        int v;
        for (int j = 0; j < bytes.length; j++) {
            v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }

    public static boolean validar(String mensaje, String encriptado) {
        String local = encriptar(mensaje);
        if (local.compareTo(encriptado) == 0) {
            return true;
        } else {
            return false;
        }
    }
}
